// main.go
package main

import (
	// "gin-learn-notes/router"
	"embed"
	"gin-learn-notes/config"
	"gin-learn-notes/logger"
	"gin-learn-notes/model"
	"gin-learn-notes/router"
	"log"
	"net/http"

	// "path/filepath"
	"time"

	"github.com/gin-gonic/gin"
)

func AuthMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 检查请求头中是否包含特定的认证token
		token := c.GetHeader("Authorization")
		if token != "Bearer some-secret-token" {
			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Unauthorized"})
			return
		}
		c.Next() // 如果认证成功，则继续处理请求
	}
}

func LoggerMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {

		startTime := time.Now()
		c.Next()

		endTime := time.Since(startTime)
		log.Printf("请求 %s 处理时间 %v", c.Request.URL.Path, endTime)
	}
}

//	func main() {
//	    r := gin.Default()      // 初始化 Gin 引擎，带 Logger + Recovery 中间件
//	    r.GET("/ping", func(c *gin.Context) {
//	        c.JSON(200, gin.H{
//	            "message": "pong",
//	        })
//	    })
//	    r.Run(":8080")          // 启动服务，监听 8080 端口
//	}
var fs embed.FS

func main() {
	//r := gin.Default()
	//r.Use(LoggerMiddleware()) // 使用自定义中间件
	//r.Use(AuthMiddleware())
	//r.GET("/test", func(c *gin.Context) {
	//	example := c.MustGet("example").(string)
	//	c.String(http.StatusOK, "Middleware test "+example)
	//})

	// 使用http.FS将嵌入的文件系统转换成http.FileSystem
	//r.StaticFS("/assets", http.FS(fs))
	// 文件上传
	//r.POST("/upload", func(c *gin.Context) {
	//	file, err := c.FormFile("file")
	//	if err != nil {
	//		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
	//		return
	//	}
	//	filename := filepath.Base(file.Filename)
	//	if err := c.SaveUploadedFile(file, "./upload/"+filename); err != nil {
	//		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
	//		return
	//	}
	//	c.JSON(http.StatusOK, gin.H{"message": "File uploaded successfully", "filename": filename})
	//})

	config.InitConfig()

	logger.InitLogger()
	defer logger.Log.Sync() // 确保缓冲区日志都被写出

	config.InitRedis()

	config.InitDB()
	config.DB.AutoMigrate(&model.User{})
	r := router.InitRouter()
	r.Run(":8080")

	// 	// r := router.InitRouter() // ⬅️ 使用封装好的函数
}

//func main() {
//	// 初始化数据库
//	config.InitDB()
//	//自动建表
//	config.DB.AutoMigrate(&model.User{})
//	// 启动路由
//	r := router.InitRouter()
//	r.Run(":8080")
//}
